package cn.leftsite.juc.pattern.future;

/**
 * @author wangjinqiang
 * @date 2019-06-06
 */
public class Client {
    public Data request(final String queryStr) {
        final FutureData future = new FutureData();
        new Thread(()->{
            // RealData 的构造很慢，所以在单独的线程中进行
            RealData realData = new RealData(queryStr);
            future.setRealData(realData);
        }).start();
        // FutureData 会立即被返回
        return future;
    }

    public static void main(String[] args) {
        Client client = new Client();
        Data data = client.request("name");
        System.out.println("请求完毕");
        try {
            // 这里可以用 sleep 代替了对其它业务逻辑的处理
            // 在处理这些业务逻辑的过程中 RealData 被创建, 从而充分利用了等待时间
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("数据=" + data.getResult());

    }
}
